
package comunicacion;

import control.ManejadorMensajesEntrada;
import control.ManejadorMensajesSalida;
import estado.EstadoCliente;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class InterfazClienteServidor extends Thread{
    private OutputStream salida;
    private Socket cliente;
    public ObjectOutputStream objout;
    private boolean conexionCreada;
    private int puerto;
    private String ip;
    private EstadoCliente estadoCliente;
    private ManejadorMensajesEntrada mme;
    private ManejadorMensajesSalida mms;

    public InterfazClienteServidor(String ip, int puerto, EstadoCliente estadoCliente, ManejadorMensajesEntrada mme, ManejadorMensajesSalida mms) {
        conexionCreada = false;
        this.ip = ip;
        this.puerto = puerto;
        this.estadoCliente = estadoCliente;
        this.mme = mme;
        this.mms = mms;
        this.start();
    }

    public boolean getConexionCreada(){
        return conexionCreada;
    }
    
    public void cerrarConexion(){
        try {
            cliente.close();
        } catch (IOException ex) {
            Logger.getLogger(InterfazClienteServidor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void run(){
         try {
            cliente = new Socket(ip, puerto);
            conexionCreada = true;
            System.out.println("Client socket: " + cliente);
            salida = cliente.getOutputStream();
            objout = new ObjectOutputStream(salida);

            new InterfazEnvia(mms, mme, this);
            new InterfazRecibe(cliente, estadoCliente, mme);

         } catch (IOException e) {
            System.err.println(e.getMessage());
        }
    }
}